跳到主要内容

对 E.F.Codd 论文的解读

这篇材料与接下来的关系代数的材料,更加适合在你对 SQL 乃至于数据库科学建立了一定的了解之后,再进行阅读,他们就像一壶好茶,沉淀以后饮用才可以领悟其中奥妙。


在经典文章《A Relational Model of Data for Large Shared Data Banks》中,E.F.Codd 结合当时的数据库工程实践情况,指出如下问题:

  • 既有数据模型难以适应大规模数据与复杂数据的存储
    每一款数据库软件所选择的数据模型,直接决定了数据库看待数据与存储数据的根本观点,而在当时,树状模型与网状模型在大规模数据与复杂数据的存储与管理上面,以及对数据变化的响应能力上面,均暴露出短板与问题。
  • 数据的管理与应用高度依赖特定版本的数据库软件
    当时的数据库用户与应用程序开发者,在存储与管理数据的时候,更多地把精力放在了具体数据库软件的实现细节上面,而不是放在他们自身的工作上面。 而这一问题,可以更加细化为三个层面:
    • 顺序依赖(Ordering Dependence)
      数据记录各个元素的排列不同,引发数据存储结构不同,进而影响数据库性能。
    • 索引依赖(Indexing Dependence)
      数据库软件用于加速数据访问而设计的索引数据,同用户的应用程序数据界限划分不清,进而导致数据冗余与无序。
    • 访问路径依赖(Access Path Dependence)
      因为数据库内部数据与外部数据的高度相关性,用户在存储数据时,不得不考虑既有数据库的内部实现细节,进而限制了自身应用的数据存储结构。

有鉴于此,E.F.Codd 直接立足于数据模型层面(数据模型是数据库系统看待数据的“世界观”,从某种程度上直接决定了数据库系统的工程架构与外部接口将怎样安排),提出对后世影响深远的“关系型数据模型”。


给定集合 S1,S2,...,SnS_1, S_2, ..., S_n(集合之间并不严格要求区分差异),如果存在RR使得其第一个元素与集合S1S_1的第一个元素相同,它的第二个元素与S2S_2的第二个元素相同,诸如此类均成立,那么RR即为架构于这n个集合上面的“关系”。

—— E.F.Codd 对于关系型数据的定义


用图形方式呈现的关系型数据

relation

由此:

  • 数据应当按照数据表的形式进行组织与管理,每一行数据记录形成一条元组(Tuple),而元组当中的每一项数据记录则形成一项属性(Attribute),而整张数据表合称为关系(Relation)
  • 数据表中的各项数据应当以灵活、便利的方式进行访问,由此就需要围绕属性来下功夫,提出如下概念(这就为数据库系统的索引提供了重要的参考):
    • 主键(Primary Key)
      用于标识关系表中某一条元组的某一项属性。
    • 超键(Super Key)
      对数项属性的组合,同样用于标识关系表中某一条元组。
    • 外键(Foreign Key)
      用于指代其它关系数据表中某项属性的属性。
  • 关系型数据应当可以通过一定的程序与策略来优化自身的结构与组织,令其结构更加契合用户的需求与应用的需要(即数据的范式)。
  • 为关系型数据,应当设立与之相对的数据操作方式与表达语言(即后续我们将会讨论的《关系代数》与 SQL 语言)。

这样,E.F.Codd 就完成了关系型数据模型的提出工作,并深远地影响了业界直到今日。